﻿using System.Collections;
using UnityEngine;

namespace DL.Tools
{
    public static class InfiniteExtensions
    {
        /// <summary>
        /// 计算对应Index位置的item的坐标
        /// </summary>
        /// <param name="index">标号</param>
        /// <param name="horizontalCount">几列</param>
        /// <param name="verticalCount">几行</param>
        /// <param name="isHorizontal">是否水平</param>
        /// <param name="rect">元素矩形</param>
        /// <param name="spacing">间隔</param>
        /// <param name="padding">矩形偏移</param>
        /// <returns></returns>
        public static Vector2 GetLocalPositionByIndex(int index, int horizontalCount, int verticalCount, bool isHorizontal,
            Rect rect, Vector2 spacing,
            RectOffset padding)
        {
            // 初始化行和列的索引
            int row = 0;
            int col = 0;
            // 初始化 x 和 y 的位置值
            float x = 0.0f;
            float y = 0.0f;
            // 根据 MoveDir 的值确定是垂直还是水平布局
            if (isHorizontal)
            {
                // 如果是水平布局，计算列和行的索引
                // 列是索引除以水平方向的元素数量
                col = index / horizontalCount;
                // 行是索引对水平方向的元素数量取余
                row = index % horizontalCount;
            }
            else
            {
                // 如果是垂直布局，计算行和列的索引
                // 行是索引除以垂直方向的元素数量
                row = index / verticalCount;
                // 列是索引对垂直方向的元素数量取余
                col = index % verticalCount;
            }

            // 计算元素的中心 y 坐标位置
            // 元素高度乘以（行索引 + 0.5）加上行索引乘以垂直间隔距离，再加上顶部边距
            y = rect.height * (row + 0.5f) + row * spacing.y + padding.top;

            // 计算元素的中心 x 坐标位置
            // 元素宽度乘以（列索引 + 0.5）加上列索引乘以水平间隔距离，再加上左边边距
            x = rect.width * (col + 0.5f) + col * spacing.x + padding.left;

            // 返回一个 Vector2，表示计算出的本地位置
            return new Vector2(x, -y);
        }
        

    }
}